package mx.unam.acatlan.poo.rps;

import mx.unam.acatlan.poo.rps.player.Agent;
import mx.unam.acatlan.poo.tournament.Tournament;

/**
 * Mantiene el estado del juego PPT actual.
 * 
 * <p style="text-align: justify">
 * Esta clase es utilizada por {@link Tournament} para llevar a cabo un juego PPT.
 * Si dos jugadores <code>j1</code>, y <code>j2</code> se enfrentan, las clases
 * que heredan de {@link Enfrentamiento} deben ser tales que, al llamar
 * {@link Agent#play(Enfrentamiento)} en <code>j1</code>, {@link Enfrentamiento#getResultadosPrevios()}
 * debe contener todos los juegos en los que ha participado <code>j2</code>, y
 * viceversa. 
 * </p>
 * 
 * @author Carlos Alegria Galicia
 * @see RPSRecord
 * @see Tournament
 */
public abstract class RPSWorld {

	/**
	 * Regresa todos los juegos en los que ha participado el {@link Agent}
	 * contrincante, de acuerdo a la descripcion dada al inicio de la clase. 
	 * 
	 * @return Un arreglo de elementos {@link RPSRecord}, con los registros de los
	 *         juegos en los que ha participado el {@link Agent} contrario. 
	 */
	public abstract RPSRecord[] getResultadosPrevios();
	
	/**
	 * Establece el {@link Movement} del jugador local en el juego actual.
	 * 
	 * @param movement El {@link Movement} a realizar. 
	 */
	public abstract void setMovimiento(Movement movement);
}
